home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / musicbrainz2 / utils.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  7KB  |  189 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. '''Various utilities to simplify common tasks.
  5.  
  6. This module contains helper functions to make common tasks easier.
  7.  
  8. @author: Matthias Friedrich <matt@mafr.de>
  9. '''
  10. __revision__ = '$Id: utils.py 13322 2011-11-03 13:38:06Z luks $'
  11. import re
  12. import urlparse
  13. __all__ = [
  14.     'extractUuid',
  15.     'extractFragment',
  16.     'extractEntityType',
  17.     'getReleaseTypeName',
  18.     'getCountryName',
  19.     'getLanguageName',
  20.     'getScriptName']
  21. PATH_PATTERN = '^/(artist|release|track|label|release-group)/([^/]*)$'
  22.  
  23. def extractUuid(uriStr, resType = None):
  24.     """Extract the UUID part from a MusicBrainz identifier.
  25.  
  26. \tThis function takes a MusicBrainz ID (an absolute URI) as the input
  27. \tand returns the UUID part of the URI, thus turning it into a relative
  28. \tURI. If C{uriStr} is None or a relative URI, then it is returned
  29. \tunchanged.
  30.  
  31. \tThe C{resType} parameter can be used for error checking. Set it to
  32. \t'artist', 'release', or 'track' to make sure C{uriStr} is a
  33. \tsyntactically valid MusicBrainz identifier of the given resource
  34. \ttype. If it isn't, a C{ValueError} exception is raised.
  35. \tThis error checking only works if C{uriStr} is an absolute URI, of
  36. \tcourse.
  37.  
  38. \tExample:
  39.  
  40. \t>>> from musicbrainz2.utils import extractUuid
  41. \t>>>  extractUuid('http://musicbrainz.org/artist/c0b2500e-0cef-4130-869d-732b23ed9df5', 'artist')
  42. \t'c0b2500e-0cef-4130-869d-732b23ed9df5'
  43. \t>>>
  44.  
  45. \t@param uriStr: a string containing a MusicBrainz ID (an URI), or None
  46. \t@param resType: a string containing a resource type
  47.  
  48. \t@return: a string containing a relative URI, or None
  49.  
  50. \t@raise ValueError: the given URI is no valid MusicBrainz ID
  51. \t"""
  52.     if uriStr is None:
  53.         return None
  54.     (scheme, netloc, path) = None.urlparse(uriStr)[:3]
  55.     if scheme == '':
  56.         return uriStr
  57.     if None != 'http' or netloc != 'musicbrainz.org':
  58.         raise ValueError('%s is no MB ID.' % uriStr)
  59.     m = re.match(PATH_PATTERN, path)
  60.     if m:
  61.         if resType is None:
  62.             return m.group(2)
  63.         if None.group(1) == resType:
  64.             return m.group(2)
  65.         raise None('expected "%s" Id' % resType)
  66.     raise ValueError('%s is no valid MB ID.' % uriStr)
  67.  
  68.  
  69. def extractFragment(uriStr, uriPrefix = None):
  70.     """Extract the fragment part from a URI.
  71.  
  72. \tIf C{uriStr} is None or no absolute URI, then it is returned unchanged.
  73.  
  74. \tThe C{uriPrefix} parameter can be used for error checking. If C{uriStr}
  75. \tis an absolute URI, then the function checks if it starts with
  76. \tC{uriPrefix}. If it doesn't, a C{ValueError} exception is raised.
  77.  
  78. \t@param uriStr: a string containing an absolute URI
  79. \t@param uriPrefix: a string containing an URI prefix
  80.  
  81. \t@return: a string containing the fragment, or None
  82.  
  83. \t@raise ValueError: the given URI doesn't start with C{uriPrefix}
  84. \t"""
  85.     if uriStr is None:
  86.         return None
  87.     (scheme, netloc, path, params, query, frag) = None.urlparse(uriStr)
  88.     if scheme == '':
  89.         return uriStr
  90.     if None is None or uriStr.startswith(uriPrefix):
  91.         return frag
  92.     raise None("prefix doesn't match URI %s" % uriStr)
  93.  
  94.  
  95. def extractEntityType(uriStr):
  96.     """Returns the entity type an entity URI is referring to.
  97.  
  98. \t@param uriStr: a string containing an absolute entity URI
  99.  
  100. \t@return: a string containing 'artist', 'release', 'track', or 'label'
  101.  
  102. \t@raise ValueError: if the given URI is no valid MusicBrainz ID
  103. \t"""
  104.     if uriStr is None:
  105.         raise ValueError('None is no valid entity URI')
  106.     (scheme, netloc, path) = urlparse.urlparse(uriStr)[:3]
  107.     if scheme == '':
  108.         raise ValueError('%s is no absolute MB ID.' % uriStr)
  109.     if scheme != 'http' or netloc != 'musicbrainz.org':
  110.         raise ValueError('%s is no MB ID.' % uriStr)
  111.     m = re.match(PATH_PATTERN, path)
  112.     if m:
  113.         return m.group(1)
  114.     raise None('%s is no valid MB ID.' % uriStr)
  115.  
  116.  
  117. def getReleaseTypeName(releaseType):
  118.     '''Returns the name of a release type URI.
  119.  
  120. \t@param releaseType: a string containing a release type URI
  121.  
  122. \t@return: a string containing a printable name for the release type
  123.  
  124. \t@see: L{musicbrainz2.model.Release}
  125. \t'''
  126.     releaseTypeNames = releaseTypeNames
  127.     import musicbrainz2.data.releasetypenames
  128.     return releaseTypeNames.get(releaseType)
  129.  
  130.  
  131. def getCountryName(id_):
  132.     """Returns a country's name based on an ISO-3166 country code.
  133.  
  134. \tThe country table this function is based on has been modified for
  135. \tMusicBrainz purposes by using the extension mechanism defined in
  136. \tISO-3166. All IDs are still valid ISO-3166 country codes, but some
  137. \tIDs have been added to include historic countries and some of the
  138. \tcountry names have been modified to make them better suited for
  139. \tdisplay purposes.
  140.  
  141. \tIf the country ID is not found, None is returned. This may happen
  142. \tfor example, when new countries are added to the MusicBrainz web
  143. \tservice which aren't known to this library yet.
  144.  
  145. \t@param id_: a two-letter upper case string containing an ISO-3166 code
  146.  
  147. \t@return: a string containing the country's name, or None
  148.  
  149. \t@see: L{musicbrainz2.model}
  150. \t"""
  151.     countryNames = countryNames
  152.     import musicbrainz2.data.countrynames
  153.     return countryNames.get(id_)
  154.  
  155.  
  156. def getLanguageName(id_):
  157.     """Returns a language name based on an ISO-639-2/T code.
  158.  
  159. \tThis function uses a subset of the ISO-639-2/T code table to map
  160. \tlanguage IDs (terminologic, not bibliographic ones!) to names.
  161.  
  162. \t@param id_: a three-letter upper case string containing an ISO-639-2/T code
  163.  
  164. \t@return: a string containing the language's name, or None
  165.  
  166. \t@see: L{musicbrainz2.model}
  167. \t"""
  168.     languageNames = languageNames
  169.     import musicbrainz2.data.languagenames
  170.     return languageNames.get(id_)
  171.  
  172.  
  173. def getScriptName(id_):
  174.     """Returns a script name based on an ISO-15924 code.
  175.  
  176. \tThis function uses a subset of the ISO-15924 code table to map
  177. \tscript IDs to names.
  178.  
  179. \t@param id_: a four-letter string containing an ISO-15924 script code
  180.  
  181. \t@return: a string containing the script's name, or None
  182.  
  183. \t@see: L{musicbrainz2.model}
  184. \t"""
  185.     scriptNames = scriptNames
  186.     import musicbrainz2.data.scriptnames
  187.     return scriptNames.get(id_)
  188.  
  189.